package com.hotel.room.config;

import com.hotel.common.config.SystemConfig;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * --- 天道酬勤 ---
 *
 * @author TRC
 * @date 2024/6/7
 * @desc
 */

/**
 * RequestInterceptor 请求拦截器
 * 作用就是拦截客户端的请求,将请求中的header读取出来,并配置到feign发送远程请求的header
 *
 */
public class OpenFeignConfig implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        // 1.获取请求对象
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request=attributes.getRequest();

        // 2.把需要传递的请求消息头传输给OpenFeign
        // RequestTemplate 就是 feign的核心实现
        // 此时完成 将请求header中的token 配置到 RequestTemplate
        // 第一个参数是请求header中对应数据的名称,第二个是对应名称的数据
        // 本地controller再调用request时就是这里已处理过的request
        template.header(SystemConfig.HEADER_TOKEN,request.getHeader(SystemConfig.HEADER_TOKEN));

    }
}
